problem of transforming such information can be regarded as having two planes. The first plane concerns the transformation of information types. The second plane concerns the meaning of the information before and after transformation.
For example, consider the specific problem of transforming an object model into computer programming language source code. The first plane of the problem concerns transformation of objects within the object model, such as transformation of class objects in an implementation object model into an ordered collection of characters or "textual stream". The second plane of the problem, in the case of a class object, concerns the information actually extracted from the class object (eg name, super-class etc.) and how such information is represented in the textual stream (eg. by position).
Conventionally, the problem of transforming an object model into source code has been solved using a "code generator" in the form of a static computer program. If the inputs to a static program change, or if a different output is required, the program must be re-written. There is consequently a general reluctance to upgrade conventional code generators in order to handle new programming technologies. Furthermore, any increase in the diversity of application of a code generator based on conventional static programming techniques requires a corresponding increase in the size of the code generating code which, in turn makes the code generator harder to maintain.
In a conventional object-oriented programming language such as Smalltalk, there are class definitions to define objects. Messaging allows such objects to collaborate with each other. The Smalltalk Virtual Machine allows such objects to be created and to execute their behavior. However, when a Smalltalk run-time program is delivered, it is a static program. In other words, a Smalltalk run-time program cannot be adapted to take account of changes in either inputs or outputs. Furthermore, the behaviour of objects therein cannot be changed. An example of a conventional method for automatic generation of object-oriented code for mapping relational data to objects is described in U.S. Pat. No. 5,499,371.